package com.lms.demo.autoconfigure;

import io.minio.errors.MinioException;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * @Author: 李孟帅
 * @CreateTime: 2020-12-25 15:27
 * @Description:
 */
public interface ObjectStorage {

    /**
     * 通过字节输入流将文件上传到对象存储
     * @author 李孟帅
     * @date 2020/12/25 15:29
     * @param buckName 桶名称
     * @param objectName 字节输入流
     * @param inputStream 对象名
     * @return void 空
    */
    void uploadObjectByInputStream(String buckName, String objectName, InputStream inputStream)
            throws MinioException, IOException, NoSuchAlgorithmException, InvalidKeyException;

    /**
     * 通过spring的
     *          @see  MultipartFile 对象上传到对象存储
     * @author 李孟帅
     * @date 2020/12/25 15:29
     * @param buckName 桶名称
     * @param objectName 字节输入流
     * @param multipartFile 对象名
     * @return void 空
     */
    void uploadObjectByMultipartFile(String buckName, String objectName, MultipartFile multipartFile) throws MinioException, IOException, InvalidKeyException, NoSuchAlgorithmException;

    /**
     * 通过字节数组将文件上传到对象存储
     * @author 李孟帅
     * @date 2020/12/25 15:29
     * @param buckName 桶名称
     * @param objectName 对象名
     * @param content 字节数组
     * @return void 空
     */
    void uploadObjectByBytes(String buckName, String objectName, byte[] content) throws MinioException, NoSuchAlgorithmException, InvalidKeyException, IOException;

    /**
     * 根据对象唯一标识从对象存储中下载文件
     * @author 李孟帅
     * @date 2020/12/25 15:29
     * @param buckName 桶名称
     * @param objectName 对象名
     * @return InputStream 空
     */
    InputStream downloadByObjectName(String buckName, String objectName) throws MinioException, NoSuchAlgorithmException, InvalidKeyException, IOException;
}
